package de.h_da.fbi.cg.pointcloud.util;

import de.h_da.fbi.cg.pointcloud.adt.Vertex;

/**
 * @author Nicolas Gramlich
 * @since 12:58:47 - 06.01.2011
 */
public class PointInConeUtil {
	// ===========================================================
	// Constants
	// ===========================================================

	// ===========================================================
	// Fields
	// ===========================================================

	// ===========================================================
	// Constructors
	// ===========================================================

	// ===========================================================
	// Getter & Setter
	// ===========================================================

	// ===========================================================
	// Methods for/from SuperClass/Interfaces
	// ===========================================================

	public static boolean isPointInCone(final Vertex pConeRoot, final Vertex pConeDirection, final float pAngle, final Vertex pTestPoint) {
		final Vertex testPointDirection = pTestPoint.sub(pConeRoot);
		final float angle = MathUtils.radToDeg((float)Math.acos(pConeDirection.dot(testPointDirection) / (pConeDirection.getDistanceTo(Vertex.ZERO) * testPointDirection.getDistanceTo(Vertex.ZERO))));
		return pAngle >= Math.abs(angle);
	}

	// ===========================================================
	// Methods
	// ===========================================================

	// ===========================================================
	// Inner and Anonymous Classes
	// ===========================================================
}
